library verilog;
use verilog.vl_types.all;
entity pmi_dsp_mac is
    generic(
        pmi_dataa_width : integer := 8;
        pmi_datab_width : integer := 8;
        pmi_additional_pipeline: integer := 0;
        pmi_input_reg   : string  := "on";
        pmi_family      : string  := "ECP2";
        pmi_gsr         : string  := "enable";
        pmi_source_control_a: string  := "parallel";
        pmi_source_control_b: string  := "parallel";
        pmi_reg_inputa_clk: string  := "CLK0";
        pmi_reg_inputa_ce: string  := "CE0";
        pmi_reg_inputa_rst: string  := "RST0";
        pmi_reg_inputb_clk: string  := "CLK0";
        pmi_reg_inputb_ce: string  := "CE0";
        pmi_reg_inputb_rst: string  := "RST0";
        pmi_reg_pipeline_clk: string  := "CLK0";
        pmi_reg_pipeline_ce: string  := "CE0";
        pmi_reg_pipeline_rst: string  := "RST0";
        pmi_reg_output_clk: string  := "CLK0";
        pmi_reg_output_ce: string  := "CE0";
        pmi_reg_output_rst: string  := "RST0";
        pmi_reg_signeda_0_clk: string  := "CLK0";
        pmi_reg_signeda_0_ce: string  := "CE0";
        pmi_reg_signeda_0_rst: string  := "RST0";
        pmi_reg_signeda_1_clk: string  := "CLK0";
        pmi_reg_signeda_1_ce: string  := "CE0";
        pmi_reg_signeda_1_rst: string  := "RST0";
        pmi_reg_signedb_0_clk: string  := "CLK0";
        pmi_reg_signedb_0_ce: string  := "CE0";
        pmi_reg_signedb_0_rst: string  := "RST0";
        pmi_reg_signedb_1_clk: string  := "CLK0";
        pmi_reg_signedb_1_ce: string  := "CE0";
        pmi_reg_signedb_1_rst: string  := "RST0";
        pmi_reg_addnsub_0_clk: string  := "CLK0";
        pmi_reg_addnsub_0_ce: string  := "CE0";
        pmi_reg_addnsub_0_rst: string  := "RST0";
        pmi_reg_addnsub_1_clk: string  := "CLK0";
        pmi_reg_addnsub_1_ce: string  := "CE0";
        pmi_reg_addnsub_1_rst: string  := "RST0";
        pmi_reg_accumsload_0_clk: string  := "CLK0";
        pmi_reg_accumsload_0_ce: string  := "CE0";
        pmi_reg_accumsload_0_rst: string  := "RST0";
        pmi_reg_accumsload_1_clk: string  := "CLK0";
        pmi_reg_accumsload_1_ce: string  := "CE0";
        pmi_reg_accumsload_1_rst: string  := "RST0";
        module_type     : string  := "pmi_dsp_mac"
    );
    port(
        A               : in     vl_logic_vector;
        B               : in     vl_logic_vector;
        SRIA            : in     vl_logic_vector(17 downto 0);
        SRIB            : in     vl_logic_vector(17 downto 0);
        CLK0            : in     vl_logic;
        CLK1            : in     vl_logic;
        CLK2            : in     vl_logic;
        CLK3            : in     vl_logic;
        CE0             : in     vl_logic;
        CE1             : in     vl_logic;
        CE2             : in     vl_logic;
        CE3             : in     vl_logic;
        RST0            : in     vl_logic;
        RST1            : in     vl_logic;
        RST2            : in     vl_logic;
        RST3            : in     vl_logic;
        SignA           : in     vl_logic;
        SignB           : in     vl_logic;
        SourceA         : in     vl_logic;
        SourceB         : in     vl_logic;
        ADDNSUB         : in     vl_logic;
        LD              : in     vl_logic_vector;
        ACCUMSLOAD      : in     vl_logic;
        ACCUM           : out    vl_logic_vector;
        OVERFLOW        : out    vl_logic;
        SROA            : out    vl_logic_vector(17 downto 0);
        SROB            : out    vl_logic_vector(17 downto 0)
    );
    attribute mti_svvh_generic_type : integer;
    attribute mti_svvh_generic_type of pmi_dataa_width : constant is 1;
    attribute mti_svvh_generic_type of pmi_datab_width : constant is 1;
    attribute mti_svvh_generic_type of pmi_additional_pipeline : constant is 1;
    attribute mti_svvh_generic_type of pmi_input_reg : constant is 1;
    attribute mti_svvh_generic_type of pmi_family : constant is 1;
    attribute mti_svvh_generic_type of pmi_gsr : constant is 1;
    attribute mti_svvh_generic_type of pmi_source_control_a : constant is 1;
    attribute mti_svvh_generic_type of pmi_source_control_b : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_inputa_clk : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_inputa_ce : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_inputa_rst : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_inputb_clk : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_inputb_ce : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_inputb_rst : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_pipeline_clk : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_pipeline_ce : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_pipeline_rst : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_output_clk : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_output_ce : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_output_rst : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_signeda_0_clk : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_signeda_0_ce : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_signeda_0_rst : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_signeda_1_clk : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_signeda_1_ce : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_signeda_1_rst : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_signedb_0_clk : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_signedb_0_ce : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_signedb_0_rst : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_signedb_1_clk : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_signedb_1_ce : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_signedb_1_rst : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_addnsub_0_clk : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_addnsub_0_ce : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_addnsub_0_rst : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_addnsub_1_clk : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_addnsub_1_ce : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_addnsub_1_rst : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_accumsload_0_clk : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_accumsload_0_ce : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_accumsload_0_rst : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_accumsload_1_clk : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_accumsload_1_ce : constant is 1;
    attribute mti_svvh_generic_type of pmi_reg_accumsload_1_rst : constant is 1;
    attribute mti_svvh_generic_type of module_type : constant is 1;
end pmi_dsp_mac;
